#include "ModRunMediator.h"
#include <QDebug>

#include "../Output/FactoryOutput.h"

#include "Gof23/Gof_Adapter/MoveOld.h"
#include "Gof23/Gof_Adapter/MoveAdapter.h"

//中介者模式的ModRun（Mediator）;
ModRunMediator::ModRunMediator()
{
    //模式名称;
    m_strModelName = "中介者模式（Mediator）;";
    //模式描述;
    m_strModelDesc = "中介者模式：用一个中介对象来封装一系列的对象交互，中介者使各对象不需要显示地相互引用，从而使其耦合松散，\n"
                     "而且可以独立地改变它们之前的交互。\n\n"
                     "如果对象与对象之前存在大量的关联关系，若一个对象改变，常常需要跟踪与之关联的对象，并做出相应的处理，\n"
                     "这样势必会造成系统变得复杂，遇到这种情形可以考虑使用中介者模式。\n"
                     "当多个对象存在关联关系时，为它们设计一个中介对象，当一个对象改变时，只需要通知它的中介对象，\n"
                     "再由它的中介对象通知每个与它相关的对象。\n"
                     "\n"
                     ;
}

//初始化显示模式;
void ModRunMediator::InitDisplay()
{
    qDebug() << m_strModelName;
    std::shared_ptr<IOutput> pOutPut = FactoryOutput::GetInstance()->CreateDescOutput();
    if (pOutPut)
    {
        std::initializer_list<QString> outList{ m_strModelName,m_strModelDesc};
        pOutPut->OutPut(outList);
    }
}

//返回模式类型;
EnumModRun ModRunMediator::GetEnum()
{
    return emModRunMediator;
}

//运行模式;
void ModRunMediator::ModRun()
{
    std::shared_ptr<IOutput> pOutPut = FactoryOutput::GetInstance()->CreateRunOutput();
    if (pOutPut)
    {
        std::initializer_list<QString> outListStart{ "========中介者模式（Mediator） start:=======" };
        std::initializer_list<QString> outListEnd{ "========中介者模式（Mediator） end:=======" };
        pOutPut->OutPut(outListStart);

        //中介者模式（Mediator）;
        
        
        pOutPut->OutPut(outListEnd);
    }

}

InterFaceModRun* ModRunMediator::CreateMe()
{
    return new ModRunMediator();
}
